package net.xinqushi.design.Facade;
import org.apache.catalina.connector.*;

/**
 *  Facade 和Wrapper 的区别是，Wrapper是对一个类的功能拓展，Facade更像是一种整合资源的手段,
 *  Facade有一个典型的例子，对接第三方接口:第三方的子系统A、B、C肯定不会暴露给我们，
 *  我们只需访问他们的门面Facade获取其整合数据;
 *  如果不使用Facade直接访问子系统违背了“开闭原则”，也违背了“迪米特法则”，所以有必要为多个子系统提供一个统一的接口，
 *  从而降低系统的耦合度，这就是外观模式的目标。
 * @author xjie
 * @description 外观模式，对多个(或一个)接口的方法提取、封装
 * @see RequestFacade
 */
public class FacadeDemo {
    Engineer engineer;//delegate
    Builder builder;//delegate
    FacadeDemo(){}
    FacadeDemo(Engineer engineer,Builder builder){
        this.engineer=engineer;this.builder=builder;
    }
    void engineer(){
        engineer.engineer();
    }
    void build(){
        builder.build();
    }
    void work(){//可提取多个方法
        engineer.engineer();
        builder.build();
    }
}


class Engineer {//设计师
    void engineer(){};
}
class Builder{//建筑工
    void build(){};
}